#pragma once

#include <string>
#include <vector>

namespace kryptos { namespace cryptography {

class Encrypter
{
public:

    virtual int encryptFile(const std::string &filepath, const std::string &output) = 0;
    virtual int encryptFile(const std::string &filepath, std::ostream &output) = 0;
    virtual int encryptAndEncodeFile(const std::string &filepath, std::ostream &output) = 0;

    virtual int encryptBuffer(const char* buffer, int len, std::vector<char> &output) = 0;
    virtual int encryptAndEncodeBuffer(const char* buffer, int len, std::vector<char> &output) = 0;

    virtual int decryptFile(const std::string &filepath, const std::string &output) = 0;
    virtual int decryptFile(std::istream &filepath, std::ostream &output) = 0;
    virtual int decryptBuffer(const char* buffer, int len, std::vector<char> &output) = 0;


};

}}
